import axios from 'axios'
import router from '../router/index'
import store from '../store'; 

let times = [],
    timer = null;

// 配置基准地址
let host = 'http://manager.sdxing.cn/'

// 判断是否为开发环境 , 开发环境 代理proxy才会生效
if (process.env.NODE_ENV === 'development') host = '/api'

// 创建axios实例
const http = axios.create({
    baseURL: host,
    timeout: 20000
}) 
// 配置 请求拦截器 (请求拦截器可以拦截到所有的配置项)
http.interceptors.request.use(config => {
    // 携带上token
    // config.headers.token = localStorage.getItem('token')
    // 每次请求开始前，开启定时器
    timer = setTimeout(() => {
        !store.state.isAppending && store.commit('changeAppending', true)
    },600)
    times.push(timer)
    return config
}, error => {
    // 如果失败 就返回失败信息
    return Promise.reject(error)
})

http.interceptors.response.use(response => {
    // 清除所有定时器
    clearAllTimer()
    // 去除loading效果
    store.commit('changeAppending',false)
    // 这样配置后 开发中拿到的后台数据只有data主体内容 不用再二次处理了
    const res = response.data
    if (res.code == '00001' && res.msg == '请先登录') {
        window.localStorage.removeItem('token')
        router.push({ name: 'Login' })
    }
    return res
}, error => {
    clearAllTimer()
    store.commit('changeAppending',false)
    return Promise.reject(error)
})

function clearAllTimer(){
    times.forEach(item => {
        clearTimeout(item)
    })
    times = []
}

export default http